package vip.liux.backend.application.service.product;

import lombok.Getter;
import lombok.Setter;
import vip.liux.application.dots.AuditedEntityDto;
import vip.liux.contracts.shared.enums.Status;
import vip.liux.contracts.shared.enums.product.DeductStockType;
import vip.liux.contracts.shared.enums.product.ShelfState;
import vip.liux.contracts.shared.value.Image;
import vip.liux.contracts.shared.value.SpecDetail;
import vip.liux.contracts.shared.value.Specs;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

/**
 * 商品 SPU 数据传输对象
 * 包含商品的基本信息以及 SKU 详细信息列表
 */
@Getter
@Setter
public class ProductSpuDto extends AuditedEntityDto<Long> implements ProductExtInfo, Serializable {

    /**
     * 商品编号 (SPU)
     */
    private String spu;

    /**
     * 三级类目编号
     */
    private String catNo;

    /**
     * 三级类目名称
     */
    private String catName;

    /**
     * 一级类目编号
     */
    private String catRootNo;

    /**
     * 一级类目名称
     */
    private String catRootName;

    /**
     * 二级类目编号
     */
    private String catParentNo;

    /**
     * 二级类目名称
     */
    private String catParentName;

    /**
     * 商品品牌编号
     */
    private String brandNo;

    /**
     * 商品品牌名称
     */
    private String brandName;

    /**
     * 商品名称
     */
    private String productName;

    /**
     * 商品描述
     */
    private String desc;

    /**
     * 商品库存总量
     */
    private Integer stockTotal;

    /**
     * 商品图片列表
     */
    private List<Image> images;

    /**
     * 商品状态 (启用/禁用)
     */
    private Status status;

    /**
     * 规格
     */
    private List<Specs> specs;

    /**
     * 商品 SKU 详细信息列表
     */
    private List<ProductSpuDetailDto> details;

    private String remark;

    /**
     * 库存扣减方式 0-下单扣减 1-付款扣减
     */
    private DeductStockType deductStockType;

    /**
     * 商品 SKU 详细信息类
     * 包含 SKU 的具体属性和状态
     */
    @Getter
    @Setter
    public static class ProductSpuDetailDto extends AuditedEntityDto<Long> implements Serializable {

        /**
         * SKU 编号
         */
        private String sku;

        /**
         * 商品条码
         */
        private String barCode;

        /**
         * 市场价
         */
        private BigDecimal marketPrice;

        /**
         * 销售价
         */
        private BigDecimal salePrice;

        /**
         * 商品库存
         */
        private Integer stockTotal;

        /**
         * SKU 图片
         */
        private String image;

        /**
         * 商品上架状态
         */
        private ShelfState shelfState;

        /**
         * 商品规格列表
         */
        private List<SpecDetail> specDataList;
    }
}